package com.coolingme.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 商品
 * <p>
 * indexName：指定索引库的名称
 * replicas：指定副本数，因为没有使用集群，设置副本数为0
 * shards：设置分辨数，使用默认的1即可
 *
 * @author wangyue
 * @date 2021/7/30 9:36
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "shopping", replicas = 0)
public class Product {

    public Product(Long id, String title, String category, Double price, String images, Date publishTime, Date createTime) {
        this.id = id;
        this.title = title;
        this.category = category;
        this.price = price;
        this.images = images;
        this.publishTime = publishTime;
        this.createTime = createTime;
    }

    /**
     * 商品唯一标识
     * 必须有 id,这里的 id 是全局唯一的标识，等同于 es 中的"_id"
     */
    @Id
    private Long id;

    /**
     *type : 字段数据类型
     *analyzer : 分词器类型
     *index : 是否索引(默认:true)
     *Keyword : 短语,不进行分词
     */

    /**
     * 商品名称
     */
    @Field(type = FieldType.Text, analyzer = "ik_max_word", normalizer = "lowercase", searchAnalyzer = "lowercase")
    private String title;

    /**
     * 分类名称
     */
    @Field(type = FieldType.Keyword)
    private String category;

    /**
     * 商品价格
     */
    @Field(type = FieldType.Double)
    private Double price;

    /**
     * 图片地址
     */
    @Field(type = FieldType.Keyword, index = false)
    private String images;

    /**
     * 发布时间
     */
    @Field(type = FieldType.Auto)
    private Date publishTime;

    /**
     * 创建时间
     */
    @Field(type = FieldType.Auto)
    private Date createTime;

    /**
     * 商品类型列表
     */
    private List<Comment> commentList;

    /**
     * 属性映射
     */
    private Map<String, String> attrMap;

}
